home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / MacMETH 3.2.1 / Examples / Rectangles.MOD < prev    next >
Encoding:
Text File  |  1992-12-29  |  2.4 KB  |  73 lines  |  [TEXT/MEDT]

  1. MODULE Rectangles;   (*NW 26.8.81 / Lilith *)
  2.                      (*MW 19.3.85 / NS32016*)
  3.                      (*WH 22.2.86 / MC68000*)
  4.  
  5.   (* This program shows the access to the Macintosh Toolbox *)
  6.  
  7.   FROM SYSTEM IMPORT
  8.     ADDRESS, ADR;
  9.   FROM TerminalIn IMPORT
  10.     BusyRead;
  11.   FROM QuickDraw IMPORT
  12.     GrafPtr, Point, Rect, GetPort, SetPort, SetOrigin,
  13.     SetRect, InvertRect, OffsetRect, InsetRect;
  14.  
  15.   VAR
  16.     x0, y0, dx0, dy0, x1, y1, dx1, dy1, X, Y, W, H, width, height: INTEGER;
  17.     ch: CHAR;
  18.     myWindow, oldWindow: GrafPtr;
  19.     oldOrigin: Point;
  20.     screen, rect: Rect;
  21.     title: ARRAY [0..10] OF CHAR;
  22.  
  23.   PROCEDURE NewWindow(wStorage: ADDRESS;
  24.                       VAR boundsRect: Rect;
  25.                       title: ADDRESS;
  26.                       visible: BOOLEAN;
  27.                       theProc: INTEGER;
  28.                       behind: ADDRESS;
  29.                       goAwayFlag: BOOLEAN;
  30.                       refCon: LONGINT): ADDRESS; CODE 0A913H;
  31.   PROCEDURE DisposeWindow(theWindows: ADDRESS); CODE 0A914H;
  32.  
  33. BEGIN
  34.   title := ' Rectangle'; title[0] := 12C; (* length of string *)
  35.   GetPort(oldWindow); screen := oldWindow^.portBits.bounds;
  36.   oldOrigin := oldWindow^.portRect.topLeft;
  37.   OffsetRect(screen, 0, 18); InsetRect(screen, 5, 23);
  38.   myWindow := NewWindow(NIL, screen, ADR(title), TRUE, 0, -1D, FALSE, 0D);
  39.   SetPort(myWindow);
  40.   WITH myWindow^.portRect DO
  41.     width  := right - left;
  42.     height := bottom - top;
  43.   END;
  44.   SetOrigin(0, 0);
  45.   x0 := 0; y0 := 0; dx0 := 12; dy0 := 28;
  46.   x1 := 0; y1 := 0; dx1 := 20; dy1 := 44;
  47.   REPEAT
  48.     x0 := x0 + dx0;
  49.     IF x0 < 0 THEN x0 := -x0; dx0 := -dx0
  50.       ELSIF x0 > width THEN x0 := 2*width - x0; dx0 := -dx0
  51.     END ;
  52.     y0 := y0 + dy0;
  53.     IF y0 < 0 THEN y0 := -y0; dy0 := -dy0
  54.       ELSIF y0 > height THEN y0 := 2*height - y0; dy0 := -dy0
  55.     END ;
  56.     x1 := x1 + dx1;
  57.     IF x1 < 0 THEN x1 := -x1; dx1 := -dx1
  58.       ELSIF x1 > width THEN x1 := 2*width - x1; dx1 := -dx1
  59.     END ;
  60.     y1 := y1 + dy1;
  61.     IF y1 < 0 THEN y1 := -y1; dy1 := -dy1
  62.       ELSIF y1 > height THEN y1 := 2*height - y1; dy1 := -dy1
  63.     END ;
  64.     IF x0 < x1 THEN X := x0 ELSE X := x1 END ;
  65.     IF y0 < y1 THEN Y := y0 ELSE Y := y1 END ;
  66.     W := ABS(x0-x1); H := ABS(y0-y1);
  67.     SetRect(rect, X, Y, X+W, Y+H); InvertRect(rect);
  68.     BusyRead(ch)
  69.   UNTIL ch # 0C;
  70.   DisposeWindow(myWindow);
  71.   SetPort(oldWindow); SetOrigin(oldOrigin.h, oldOrigin.v);
  72. END Rectangles.
  73.